package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import modelo.AnfitrionDAO;
import modelo.Evento;
import modelo.EventoDAO;
import modelo.InvitadoDAO;
import modelo.Organizacion;
import modelo.PersonaDAO;
import vista.VentanaRegistrarEvento;

public class ControladorVentanaRegistrarEvento implements ActionListener {

	private VentanaRegistrarEvento ventanaRegistrarEvento;
	private Organizacion organizacion;
	private Evento evento;
	private static final String[] TIPOS_EVENTOS = {"Matrimonio", "Quince Años" , "Baby Shower", "Cumpleaño", "Graduación","Otro" };
	private static final String[] DIAS = {"01" , "02" , "03" , "04" , "05" , "06" , "07" , "08" , "09" ,"10" ,"11" ,"12" ,"13" ,"14" ,"15" ,"16" ,"17" ,"18" ,"19" ,"20" ,"21" ,"22" ,"23" ,"24" ,"25" ,"26" ,"27" ,"28" ,"29" ,"30" ,"31"};
	private static final String[] MESES = {"01" , "02" , "03" , "04" , "05" , "06" , "07" , "08" , "09" , "10" , "11" , "12"};
	private static final String[] ANNOS = {"2012" , "2013" , "2014" , "2015" , "2016" , "2017" , "2018" , "2019" , "2020" , "2021" , "2022" , "2023" , "2024" , "2025"};
	private static final String[] HORAS = {"00" , "01" , "02" , "03" , "04" , "05" , "06" , "07" , "08" , "09" , "010" , "011" , "012"};
	private static final String[] MINUTOS = {"00" , "01" , "02" , "03" , "04" , "05" , "06" , "07" , "08" , "09" , "10" , "11" , "12" , "13" , "14" , "15" , "16" , "17" , "18" , "19" , "20" , "21" , "22" , "23" , "24" , "25" , "26" , "27" , "28" , "29" , "30" , "31" , "32" , "33" , "34" , "35" , "36" , "37" , "38" , "39" , "40" , "41" , "42" , "43" , "44" , "45" , "46" , "47" , "48" , "49" , "50" , "51" , "52" , "53" , "54" , "55" , "56" , "57" , "58" , "59"};
	private static final String[] AMPM = {"am", "pm"};
	
	private EventoDAO eventoDao;
	private String codigoEvento;
	
	private PersonaDAO personaDao;
	private InvitadoDAO invitadoDao;
	private AnfitrionDAO anfitrionDao;
	
	
	public ControladorVentanaRegistrarEvento (Organizacion organizacion){
		ventanaRegistrarEvento= new VentanaRegistrarEvento();
		ventanaRegistrarEvento.setLocationRelativeTo(null);
		ventanaRegistrarEvento.setVisible(true);	
		ventanaRegistrarEvento.agregarListener(this);
		ventanaRegistrarEvento.setTiposEventos(TIPOS_EVENTOS);
		ventanaRegistrarEvento.setDatosFecha(DIAS,MESES,ANNOS);
		ventanaRegistrarEvento.setDatosHora(HORAS,MINUTOS,AMPM);
		this.organizacion = organizacion;
		this.evento = new Evento();
		this.ventanaRegistrarEvento.bloquearEvento(false);
	
		eventoDao = new EventoDAO();
	
		invitadoDao = new InvitadoDAO();
		anfitrionDao = new AnfitrionDAO();
		personaDao = new PersonaDAO();
	
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		    ControladorVentanaAgregarPersona controladorVentanaAgregarPersona;
	
		    ControladorVentanaListaObsequio controladorVentanaListaObsequio;
		
		    codigoEvento = ventanaRegistrarEvento.getTxtCodigoEvento().getText();
		    
		if (e.getActionCommand().equalsIgnoreCase("Agregar Invitados")){
			
			controladorVentanaAgregarPersona = new ControladorVentanaAgregarPersona(evento,"Invitados", codigoEvento);
		
		} else if (e.getActionCommand().equalsIgnoreCase("Agregar Anfitriones")){
		
			controladorVentanaAgregarPersona = new ControladorVentanaAgregarPersona(evento,"Anfitriones", codigoEvento);
		
		} else if (e.getActionCommand().equalsIgnoreCase("Agregar Agasajados")){
			
			controladorVentanaAgregarPersona = new ControladorVentanaAgregarPersona(evento,"Agasajados", codigoEvento);
		
		} else if (e.getActionCommand().equalsIgnoreCase("Seleccionar lista de obsequios")){
		
			 controladorVentanaListaObsequio = new ControladorVentanaListaObsequio(organizacion,evento, codigoEvento);
		
		}  else if (e.getActionCommand().equalsIgnoreCase("Buscar")){
		
			buscarEvento();
		
		} else if (e.getActionCommand().equalsIgnoreCase("Salir")){
		
			ventanaRegistrarEvento.dispose();
		
		} else if (e.getActionCommand().equalsIgnoreCase("Limpiar")) {
			this.limpiarTodo();
			ventanaRegistrarEvento.limpiarCampos();
			ventanaRegistrarEvento.bloquearEvento(false);
			ventanaRegistrarEvento.habilitarCodigo(true);
			ventanaRegistrarEvento.habilitarBuscar(true);
			
		} else {
			  
			if(ventanaRegistrarEvento.datosLlenos() || this.eventoLleno()){
			
				ventanaRegistrarEvento.mostrarMensaje("Llenar Todos los campos");
			
			}	else {
				
				ventanaRegistrarEvento.mostrarMensaje("Se ha registrado el evento");
				
				this.agregarEvento(evento);

				this.limpiarTodo();

				
			}
		}
			
	}

	private void buscarEvento() {		
		int indice;
		
		codigoEvento = ventanaRegistrarEvento.getTxtCodigoEvento().getText();
		
	if(codigoEvento.equalsIgnoreCase("")){	
		
		ventanaRegistrarEvento.mostrarMensaje("Ingrese el codigo del Evento");
		
	} else {
		   
	//	indice = organizacion.buscarEvento(codigo);
		
		Evento eve = new Evento();
		eve = eventoDao.buscarEvento(codigoEvento);
		
		
	//	if (indice >= 0) {
		
		if ( eve != null ) {
			
			ventanaRegistrarEvento.mostrarMensaje("El Evento Existe");
		
		} else {
			//evento  no existe
			
			ventanaRegistrarEvento.bloquearEvento(true);
			ventanaRegistrarEvento.habilitarCodigo(false);
			ventanaRegistrarEvento.habilitarBuscar(false);
			
		 }	
	  }
	}
	
	private void limpiarTodo() {
		
		this.evento = new Evento();
		ventanaRegistrarEvento.limpiarCampos();
		
	
	}

	private void agregarEvento(Evento evento) {
		String codigo = ventanaRegistrarEvento.getTxtCodigoEvento().getText();
		String tipoEvento = ventanaRegistrarEvento.getCmdTipoEvento();
		String direccion = ventanaRegistrarEvento.getTxtDireccionEvento().getText();
		String fecha = ventanaRegistrarEvento.getFechaEvento();
		String hora = ventanaRegistrarEvento.getHoraEvento();
		
		evento.setCodigo(codigo);
		evento.setTipoEvento(tipoEvento);
		evento.setDireccion(direccion);
		evento.setFecha(fecha);
		evento.setHora(hora);
		
	//	organizacion.agregarEvento(evento);
		
		eventoDao.registrarEvento(evento);
		
		this.ventanaRegistrarEvento.habilitarBuscar(true);
		this.ventanaRegistrarEvento.habilitarCodigo(true);
		this.limpiarTodo();
		
	}
	

	private boolean eventoLleno() {
		
		int numinv = invitadoDao.numeroEvento(codigoEvento);
		int numanfi = anfitrionDao.numeroAnfitriones(codigoEvento);
		int numper = personaDao.numeroPersonas(codigoEvento);
		
		//if(evento.cantAgasajados()*evento.cantAnfitriones()*evento.cantInvitados()*evento.getListaobsequio().cantListaObsequios()==0) {
			
		if( numinv * numanfi * numper == 0 ){
			
			return true;
		}
		
		return false;
	}	
}